package generation;

import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * GenerateurCodeC permet de préparer le code correspondant à un test sur le
 * code C généré par Ocarina en remplaçant les tags introduits par
 * l'utilisateur. Cependant cette classe n'utilise pas Ocarina mais se contente
 * de remplacer des motifs par des valeurs.
 * 
 * @see GenerateurCode
 * 
 */
public class GenerateurCodeC extends GenerateurCode {

	/**
	 * genererCode s'occupe de remplacer tous les tags dans une série de
	 * fichiers
	 * 
	 * @param d
	 *            document dom décrivant la campagne de tests
	 * @param projectLocation
	 *            chemin vers le repertoire à modifier
	 * @param index
	 *            index du cas de test à réaliser (commence à 0)
	 */
	public void genererCode(Document d, String projectLocation, int index) {

		// On récupère la liste des modification à effectuer (fichiers à
		// modifier)
		Node testCase = d.getElementsByTagName("testCase").item(index);
		Element testCaseElement = (Element) testCase;
		NodeList files = testCaseElement
				.getElementsByTagName("testDescription");

		// Pour chaque fichier à modifier, on remplace tous les tags par la
		// valeur val indiquée
		for (int i = 0; i < files.getLength(); i++) {
			Node testFile = files.item(i);
			Element testFileElement = (Element) testFile;

			String fileName = testFileElement.getElementsByTagName("fileName")
					.item(i).getTextContent();
			String fullFileName = projectLocation + fileName;

			NodeList replList = testFileElement.getElementsByTagName("repl");

			// Pour chaque remplacement à réaliser, on appelle la méthode
			// replaceString de la superclasse
			for (int j = 0; j < replList.getLength(); j++) {
				String tag = ((Element) (replList.item(j)))
						.getElementsByTagName("tag").item(j).getTextContent();
				String val = ((Element) (replList.item(j)))
						.getElementsByTagName("val").item(j).getTextContent();

				try {
					replaceString(fullFileName, tag, val);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}

	}

}
